package com.example.demoes.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
// @Document(indexName = "goods",shards = 3,replicas = 1)
@Document(indexName = "goods",shards = 3)
public class EsGoods {
    @Id
    Long id;
    @Field(type = FieldType.Text,analyzer = "ik_max_word")
    String title; //标题
    @Field(type = FieldType.Keyword)
    String category;// 分类
    @Field(type = FieldType.Keyword)
    String brand; // 品牌
    @Field(type = FieldType.Double)
    Double price; // 价格
    @Field(index = false, type = FieldType.Keyword)
    String images; // 图片地址
}

// 一般我认为虽然Elasticsearch提供了搜索功能，大部分情况下我们并不像常规的关系型数据库一样进行直接写入，而是通过同步的方式进行同步或者预热写入数据。

/*
@Document 作用在类，标记实体类为文档对象，一般有四个属性

        　　indexName：对应索引库名称

        　　type：对应在索引库中的类型

        　　shards：分片数量，默认5

        　　replicas：副本数量，默认1

@Id 作用在成员变量，标记一个字段作为id主键

@Field 作用在成员变量，标记为文档的字段，并指定字段映射属性：

        　　type：字段类型，取值是枚举：FieldType

        　　index：是否索引，布尔类型，默认是true

        　　store：是否存储，布尔类型，默认是false

        　　analyzer：分词器名称：ik_max_word

        IK分词器有两种分词模式：ik_max_word和ik_smart模式。
        ik_max_word： 会将文本做最细粒度的拆分
        ik_smart：会做最粗粒度的拆分
*/

//实体类上注解
/*
@Document(indexName = "china")      对应的索引为china
@Setting(shards=1, replicas = 0)    创建一个索引的分片，索引的副本数量

//属性上注解
@Field(type=FieldType.Text, analyzer=“ik_max_word”) 表示该字段是一个文本，并作最大程度拆分，默认建立索引

@Field(type=FieldType.Text,index=false) 表示该字段是一个文本，不建立索引

@Field(type=FieldType.Date) 表示该字段是一个文本，日期类型，默认不建立索引

@Field(type=FieldType.Long) 表示该字段是一个长整型，默认建立索引

@Field(type=FieldType.Keyword) 表示该字段内容是一个文本并作为一个整体不可分，默认建立索引

@Field(type=FieldType.Float) 表示该字段内容是一个浮点类型并作为一个整体不可分，默认建立索引

date 、float、long都是不能够被拆分的*/
